﻿using System;
using System.Text;

namespace Parameters
{
    class Program
    {
        static void Main(string[] args)
        {
            TestValueParameterTrans();

            TestStringBuilderTrans();

            TestValueParameterTransRef();

            //测试不定参数个数
            TestParamsModifier();
            //测试可选参数
            TestOptionalParameter();

            //测试命名参数
            TestNameArguments();
        }
        //测试值类型
        static void TestValueParameterTrans()
        {
            int x = 100;
            TransParameter.Foo(x);
            Console.WriteLine("局部变量x的值" + x);
        }
        //测试对象默认传递
        static void TestStringBuilderTrans()
        {
            StringBuilder sb = new StringBuilder();
            TransParameter.FooString(sb);
            Console.WriteLine(sb.ToString());
        }

        //测试不定变量参数
        static void TestParamsModifier()
        {
            Parameters parameters = new Parameters();
            int result = parameters.ParamsInAdd(new int[] { 1, 2, });
            Console.WriteLine(result.ToString());
        }
        //测试通过ref修饰符传递参数
        static void TestValueParameterTransRef()
        {
            int x = 100;
            TransParameter.FooRef(ref x);
            Console.WriteLine("局部变量x的值" + x);
        }
        // out 修饰符
        static void Split(string name, out string firstNames, out string lastName)
        {
            int i = name.LastIndexOf(' ');
            firstNames = name.Substring(0, i);
            lastName = name.Substring(i + 1);
        }
        // 测试可选参数
        static void TestOptionalParameter()
        {
            OptionalParameter optionalParameter = new OptionalParameter();
            optionalParameter.Foo();
        }

        //测试命名参数
        static void TestNameArguments()
        {
            NamedArguments namedArguments = new NamedArguments();
            namedArguments.Foo(1, y: 3);
        }

        static void TestTypeTaget()
        {
            TargetType targetType = new();
            targetType.ShowTargetTypeValue();
        }
    }
}
